
; ===========================================================================
;
; Initialisiere Paletten-Transformation
;
; a1 = Zeiger auf Quell-Palette
; a2 = Zeiger auf Ziel-Palette
;
; ===========================================================================
Init_Fadeing:
		clr.l	Fade_Routine(a0)
		lea	Fade_Palette(a0),a1
		move.w	d0,d7
		subq.w	#1,d7
.clear_table:
		clr.w	(a1)+
		dbf	d7,.clear_table
		rts

Init_Transformation:
		move.l	a1,Fade_Source_Colour(a0)
		move.l	a2,Fade_Dest_Colour(a0)
		move	d0,Fade_Amount(a0)
		clr	Fade_Offset(a0)
		clr	Fade_Speed(a0)
		move.w	#1,Fade_Speed_Reset(a0)
		move.w	Fade_Amount(a0),d0
		move.w	d0,d1
		addq.w	#1,d1
		add.w	d1,d1
		lea	Fade_Palette(a0,d1.w),a2
		lea	Fade_Palette(a0),a3
.Loop		move	d0,d1
		lsl	#2,d1
		clr.l	(a2,d1.w)
		move.w	(a1)+,(a3)+
		dbf	d0,.Loop
		lea	Init_Trans_Struct(pc),a1
		move.l	a1,Fade_Routine(a0)
		st	Is_Fading(a6)
		rts

; ===========================================================================

Init_Trans_Struct:
		move.l	Fade_Source_Colour(a0),a1
		move.l	Fade_Dest_Colour(a0),a2
		move	Fade_Amount(a0),d0
		move.w	d0,d1
		addq.w	#1,d1
		add.w	d1,d1
		lea	Fade_Palette(a0,d1.w),a3
.Loop		move.b	#-1,(a3)+
		move	(a1),d1
		lsr	#8,d1
		move	(a2),d2
		lsr	#8,d2
		sub	d2,d1
		move.b	d1,(a3)+
		move	(a1),d1
		and	#%0000000011110000,d1
		lsr	#4,d1
		move	(a2),d2
		and	#%0000000011110000,d2
		lsr	#4,d2
		sub	d2,d1
		move.b	d1,(a3)+
		move	(a1)+,d1
		and	#%0000000000001111,d1
		move	(a2)+,d2
		and	#%0000000000001111,d2
		sub	d2,d1
		move.b	d1,(a3)+
		dbf	d0,.Loop
		lea	Do_Transformation(pc),a1
		move.l	a1,Fade_Routine(a0)
.Done		rts

; ===========================================================================
;
; Verwalte Paletten-Transformation
;
; ===========================================================================

Do_Transformation:
		lea	Fade_Tabelle,a1
		move	Fade_Amount(a0),d0
		move.w	d0,d1
		addq.w	#1,d1
		add.w	d1,d1
		lea	Fade_Palette(a0,d1.w),a2

		move.l	Fade_Source_Colour(a0),a3
		lea	Fade_Palette(a0),a4
.Loop		addq	#1,a2
		move	(a3),d1
		lsr	#8,d1
		move.b	(a2)+,d2
		ext	d2
		asl	#4,d2
		add	Fade_Offset(a0),d2
		add.b	(a1,d2.w),d1
		move	d1,d3
		lsl	#8,d3
		move	(a3),d1
		and	#%0000000011110000,d1
		lsr	#4,d1
		move.b	(a2)+,d2
		ext	d2
		asl	#4,d2
		add	Fade_Offset(a0),d2
		add.b	(a1,d2.w),d1
		lsl	#4,d1
		or	d1,d3
		move	(a3)+,d1
		and	#%0000000000001111,d1
		move.b	(a2)+,d2
		ext	d2
		asl	#4,d2
		add	Fade_Offset(a0),d2
		add.b	(a1,d2.w),d1
		or	d1,d3
		move	d3,(a4)+
		dbf	d0,.Loop
		subq	#1,Fade_Speed(a0)
		bpl	.Done
		move	Fade_Speed_Reset(a0),Fade_Speed(a0)
		addq	#1,Fade_Offset(a0)
		cmp	#16,Fade_Offset(a0)
		blo	.Done
		clr.l	Fade_Routine(a0)
		sf	Is_Fading(a6)
		sf	Dont_render_Parallax(a6)
.Done		rts

; ===========================================================================
;
; Aufruf der aktuellen Transformations-Routine
;
; ===========================================================================

		;aktuelle Transformation aufrufen
Call_Transformation2:
		move.l	Fade_Routine(a0),d0
		beq	.Done
		move.l	d0,a1
		jsr	(a1)
.Done		rts

; ===========================================================================

		dc.b	+$1,+$2,+$3,+$4,+$5,+$6,+$7,+$8
		dc.b	+$8,+$9,+$A,+$B,+$C,+$D,+$E,+$F
		dc.b	+$1,+$2,+$3,+$4,+$5,+$5,+$6,+$7
		dc.b	+$8,+$9,+$A,+$B,+$C,+$C,+$D,+$E
		dc.b	+$1,+$2,+$3,+$4,+$4,+$5,+$6,+$7
		dc.b	+$8,+$8,+$9,+$A,+$B,+$C,+$C,+$D
		dc.b	+$1,+$2,+$3,+$3,+$4,+$5,+$6,+$6
		dc.b	+$7,+$8,+$9,+$9,+$A,+$B,+$B,+$C
		dc.b	+$1,+$1,+$2,+$3,+$3,+$4,+$5,+$5
		dc.b	+$6,+$7,+$7,+$8,+$9,+$9,+$A,+$B
		dc.b	+$0,+$1,+$1,+$2,+$3,+$3,+$4,+$5
		dc.b	+$5,+$6,+$7,+$7,+$8,+$9,+$9,+$A
		dc.b	+$0,+$1,+$1,+$2,+$2,+$3,+$4,+$4
		dc.b	+$5,+$5,+$6,+$7,+$7,+$8,+$8,+$9
		dc.b	+$0,+$1,+$1,+$2,+$2,+$3,+$3,+$4
		dc.b	+$4,+$5,+$5,+$6,+$6,+$7,+$7,+$8
		dc.b	+$0,+$0,+$1,+$1,+$2,+$2,+$3,+$3
		dc.b	+$4,+$4,+$5,+$5,+$6,+$6,+$7,+$7
		dc.b	+$0,+$0,+$1,+$1,+$2,+$2,+$2,+$3
		dc.b	+$3,+$4,+$4,+$4,+$5,+$5,+$6,+$6
		dc.b	+$0,+$0,+$1,+$1,+$1,+$2,+$2,+$2
		dc.b	+$3,+$3,+$3,+$4,+$4,+$5,+$5,+$5
		dc.b	+$0,+$0,+$0,+$1,+$1,+$1,+$2,+$2
		dc.b	+$2,+$3,+$3,+$3,+$4,+$4,+$4,+$4
		dc.b	+$0,+$0,+$0,+$0,+$1,+$1,+$1,+$1
		dc.b	+$2,+$2,+$2,+$2,+$3,+$3,+$3,+$3
		dc.b	+$0,+$0,+$0,+$0,+$0,+$1,+$1,+$1
		dc.b	+$1,+$1,+$1,+$2,+$2,+$2,+$2,+$2
		dc.b	+$0,+$0,+$0,+$0,+$0,+$0,+$0,+$0
		dc.b	+$1,+$1,+$1,+$1,+$1,+$1,+$1,+$1
Fade_Tabelle	dc.b	+$0,+$0,+$0,+$0,+$0,+$0,+$0,+$0
		dc.b	+$0,+$0,+$0,+$0,+$0,+$0,+$0,+$0
		dc.b	-$0,-$0,-$0,-$0,-$0,-$0,-$0,-$0
		dc.b	-$1,-$1,-$1,-$1,-$1,-$1,-$1,-$1
		dc.b	-$0,-$0,-$0,-$0,-$0,-$1,-$1,-$1
		dc.b	-$1,-$1,-$1,-$2,-$2,-$2,-$2,-$2
		dc.b	-$0,-$0,-$0,-$0,-$1,-$1,-$1,-$1
		dc.b	-$2,-$2,-$2,-$2,-$3,-$3,-$3,-$3
		dc.b	-$0,-$0,-$0,-$1,-$1,-$1,-$2,-$2
		dc.b	-$2,-$3,-$3,-$3,-$4,-$4,-$4,-$4
		dc.b	-$0,-$0,-$1,-$1,-$1,-$2,-$2,-$2
		dc.b	-$3,-$3,-$3,-$4,-$4,-$5,-$5,-$5
		dc.b	-$0,-$0,-$1,-$1,-$2,-$2,-$2,-$3
		dc.b	-$3,-$4,-$4,-$4,-$5,-$5,-$6,-$6
		dc.b	-$0,-$0,-$1,-$1,-$2,-$2,-$3,-$3
		dc.b	-$4,-$4,-$5,-$5,-$6,-$6,-$7,-$7
		dc.b	-$0,-$1,-$1,-$2,-$2,-$3,-$3,-$4
		dc.b	-$4,-$5,-$5,-$6,-$6,-$7,-$7,-$8
		dc.b	-$0,-$1,-$1,-$2,-$2,-$3,-$4,-$4
		dc.b	-$5,-$5,-$6,-$7,-$7,-$8,-$8,-$9
		dc.b	-$0,-$1,-$1,-$2,-$3,-$3,-$4,-$5
		dc.b	-$5,-$6,-$7,-$7,-$8,-$9,-$9,-$A
		dc.b	-$1,-$1,-$2,-$3,-$3,-$4,-$5,-$5
		dc.b	-$6,-$7,-$7,-$8,-$9,-$9,-$A,-$B
		dc.b	-$1,-$2,-$3,-$3,-$4,-$5,-$6,-$6
		dc.b	-$7,-$8,-$9,-$9,-$A,-$B,-$B,-$C
		dc.b	-$1,-$2,-$3,-$4,-$4,-$5,-$6,-$7
		dc.b	-$8,-$8,-$9,-$A,-$B,-$C,-$C,-$D
		dc.b	-$1,-$2,-$3,-$4,-$5,-$5,-$6,-$7
		dc.b	-$8,-$9,-$A,-$B,-$C,-$C,-$D,-$E
		dc.b	-$1,-$2,-$3,-$4,-$5,-$6,-$7,-$8
		dc.b	-$8,-$9,-$A,-$B,-$C,-$D,-$E,-$F

